home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 142
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin
/
tools
/
s_tool
/
inp.c
< prev
next >
Wrap
Text File
|
1997-10-24
|
4KB
|
232 lines
#include "JX250.H"
#include <sys\iocs.h>
#include <sys\dos.h>
#include <sys\scsi.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <_tnb.c>
/*************************************************
文字入力(最大255字)
x,y = 座標
os = 文字列アドレス(最上ビットが立っている場合初期数)
ln = 最大入力文字列
bc = バックカラー(ダミー)
m = 1 ; 数字のみ 2 ; 小数認(os を 1/100 して使用)
注)TopWindowでない場合、ダイアログが開く
*************************************************/
UNchar *InputStr(x,y,os,ln,bc,m)
UNchar *os;
int x,y,ln,bc,m;
{
int c,i,j,z,zz,nk;
int cm;
static UNchar buf[256];
UNchar buf_a[256];
struct _fillptr PP;
buf[0]=buf[1]=0;
_dos_kflushio(0xFF);
_iocs_sp_regst(0,bit(31),0,0,-1,-1);
z=0;
MsPat(-1);
for(i=0;c=os[i];i++){
if ( ZenChk(c) ){
if ( z+1<ln ){
buf_a[z]=1; buf[z++]=c;
buf_a[z]=2; buf[z++]=os[++i];
}
} else {
if ( z<ln ){
buf_a[z]=1; buf[z++]=c;
}
}
buf[z]=0;
}
buf[z]=0; // END
buf_a[z]=9; // END
zz=z;
z=0; // 一番左に
nk=0; // キー入力はしたか
//--- 入力部分を白くする
PP.x1=x;
PP.y1=y;
PP.x2=x+ln*6-1;
PP.y2=y+12-1;
PP.color=PalTable[15];
/*書き替え*/
CRTVDISP();
_iocs_fill(&PP);
p_12H(x,y,buf);
cm=1;
if ( nk==0 && m!=0 ){
for(i=0;i<ln;i++)
GGREV_H(VADDS(0,i*6+x+((z<ln)?z:ln-1)*6,y)); // カーソル
} else {
GGREV_H(VADDS(0,x+((z<ln)?z:ln-1)*6,y)); // カーソル
}
while( MS_RSW() );
ONtim_set(1000);
for(;;){
for(;;){
if ( (c=_dos_keysns())!=0 ){;
c=_dos_inkey();
break;
} elif ( MS_RSW() ){
c=0x3;
break;
}
if ( ONtim_count()>50 ){
if ( nk==0 && m!=0 ){
;
} else {
cm=1-cm;
GGREV_H(VADDS(0,x+((z<ln)?z:ln-1)*6,y)); // カーソル
}
ONtim_set(1000);
}
}
//FepDisp();
if ( c==0xD ){
//--- CR
break;
} elif ( c==0x3 ){
//--- break
buf[0]=0;
buf[1]=255;
break;
} elif ( c==0x0B || c==0x0C ){
//--- HOME/CLR
buf[0]=buf[1]=0;
buf_a[0]=buf[1]=0;
z=zz=0;
} elif ( c==0x7 ){
//--- DEL
if ( z<zz ){
if ( buf_a[z]==1 && buf_a[z+1]==2 )
z+=2;
else z++;
j=1;
if ( buf_a[z-1]==2 )
j=2;
z-=j;
zz-=j;
for(i=z;i<=255-j;i++){
buf[i]=buf[i+j];
buf_a[i]=buf_a[i+j];
}
ONtim_set(1000);
} else
continue;
} elif ( c==0x8 ){
//--- BS
if ( z>0 ){
j=1;
if ( buf_a[z-1]==2 )
j=2;
z-=j;
zz-=j;
for(i=z;i<=255-j;i++){
buf[i]=buf[i+j];
buf_a[i]=buf_a[i+j];
}
ONtim_set(1000);
} else
continue;
} elif ( c==0x1D ){
//--- 左
if ( z>0 ){
j=1;
if ( buf_a[z-1]==2 )
j=2;
z-=j;
ONtim_set(1000);
} else
continue;
} elif ( c==0x1C ){
//--- 右
if ( z<zz ){
if ( buf_a[z]==1 && buf_a[z+1]==2 )
z+=2;
else z++;
ONtim_set(1000);
} else
continue;
} elif ( (c&0xFF)<0x20 || (c&0xFF)==0 ){
//--- CTRL
continue;
} else {
c&=0xFF;
if ( m==1 ){
if ( c>='0' && c<='9' || c=='-' )
;
else continue;
} elif ( m==2 ){
if ( c>='0' && c<='9' || c=='.' || c=='-' )
;
else continue;
}
if ( nk==0 && m!=0 ){
// 最初が数字キーなので
buf[0]=buf[1]=0;
buf_a[0]=buf_a[1]=0;
z=zz=0;
}
if ( ZenChk(c) ){
if ( zz+1<ln || m!=0 ){
for(i=252;i>=z;i--){
buf[i+2]=buf[i];
buf_a[i+2]=buf_a[i];
}
buf_a[z]=1; buf[z++]=c;
buf_a[z]=2; buf[z++]=_dos_inkey();
zz+=2;
} else _dos_kflushio(0xFF);
} else {
if ( zz<ln || m!=0 ){
for(i=253;i>=z;i--){
buf[i+1]=buf[i];
buf_a[i+1]=buf_a[i];
}
buf_a[z]=1; buf[z++]=c;
zz++;
} else _dos_kflushio(0xFF);
}
ONtim_set(1000);
}
/*書き替え*/
CRTVDISP();
_iocs_fill(&PP);
if ( m!=0 ){
i=buf[ln];
buf[ln]=0;
p_12H(x,y,buf);
buf[ln]=i;
} else {
p_12H(x,y,buf);
}
cm=1;
nk=-1;
GGREV_H(VADDS(0,x+((z<ln)?z:ln-1)*6,y)); // カーソル
}
if ( cm ){
CRTVDISP();
_iocs_fill(&PP);
if ( m!=0 ){
i=buf[ln];
buf[ln]=0;
p_12H(x,y,buf);
buf[ln]=i;
} else {
p_12H(x,y,buf);
}
}
while( _dos_keysns() )
_dos_inkey();
if ( m!=0 )
buf[ln]=0;
MsPat(1);
return(buf);
}